/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Utilidades;

import Model.Connect;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.sql.*;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.logging.Logger;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.swing.JComboBox;

/**
 *
 * @author Molina
 */
public class Utilidades {
    static Connect conexion = new Connect();
    static final String HEXES = "0123456789ABCDEF";
    private static final char[] CONSTS_HEX = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};

    public static String convierteClave(String password)
            throws NoSuchAlgorithmException {
        MessageDigest md = MessageDigest.getInstance("MD5");
        md.update(password.getBytes());
        byte byteData[] = md.digest();
        //convert the byte to hex format method 2

        StringBuffer hexString = new StringBuffer();
        for (int i = 0; i < byteData.length; i++) {
            String hex = Integer.toHexString(0xff & byteData[i]);
            if (hex.length() == 1) {
                hexString.append('0');
            }
            hexString.append(hex);
        }
        return hexString.toString();
    }

    public static String convertToString(Date date) {
        DateFormat df;
        String dateString = null;
        df = new SimpleDateFormat("dd/MM/yy");
        dateString = df.format(date);
        return dateString;
    }

    public static Date ConverToDate(String stringDate) {
        DateFormat df;
        Date date = new Date();
        df = new SimpleDateFormat("dd/MM/yy");
        try {
            date = df.parse(stringDate);
        } catch (ParseException ex) {
            ex.printStackTrace();
        }
        return date;
    }

    public boolean validateEmail(String email) {
        Pattern p = Pattern.compile("[a-zA-Z0-9]+[.[a-zA-Z0-9_-]+]*@[a-z0-9][\\w\\.-]*[a-z0-9]\\.[a-z][a-z\\.]*[a-z]$");//me gusta esta
        Matcher m = p.matcher(email);
        return m.matches();
    }

    public boolean isEmail(String correo) {
        Pattern pat = null;
        Matcher mat = null;
        pat = Pattern.compile("^([0-9a-zA-Z]([_.w]*[0-9a-zA-Z])*@([0-9a-zA-Z][-w]*[0-9a-zA-Z].)+([a-zA-Z]{2,9}.)+[a-zA-Z]{2,3})$");
        mat = pat.matcher(correo);
        if (mat.find()) {
            System.out.println("[" + mat.group() + "]");
            return true;
        } else {
            return false;
        }
    }

    public boolean isDate(String fechax) {
        try {
            SimpleDateFormat formatoFecha = new SimpleDateFormat("dd/MM/yyyy");
            Date fecha = formatoFecha.parse(fechax);
        } catch (Exception e) {
            return false;
        }
        return true;
    }

    public static String encriptaEnMD5(String stringAEncriptar) {

        try {
            MessageDigest msgd = MessageDigest.getInstance("MD5");
            byte[] bytes = msgd.digest(stringAEncriptar.getBytes());
            StringBuilder strbCadenaMD5 = new StringBuilder(2 * bytes.length);
            for (int i = 0; i < bytes.length; i++) {
                int bajo = (int) (bytes[i] & 0x0f);
                int alto = (int) ((bytes[i] & 0xf0) >> 4);
                strbCadenaMD5.append(CONSTS_HEX[alto]);
                strbCadenaMD5.append(CONSTS_HEX[bajo]);
            }
            return strbCadenaMD5.toString();
        } catch (NoSuchAlgorithmException e) {
            return null;
        }
    }

    public ArrayList ejecutaQueryPaginada(String query, int numPagina, int numRegPagina) {

        ArrayList alResultado = new ArrayList();
        Connection conBBDD = null;
        Statement st = null;
        ResultSet rs = null;
        try {
            Connect.conectar();
            conBBDD = Connect.getConexion();
            st = conBBDD.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
            st.setFetchSize(numRegPagina);

            rs = st.executeQuery(query);
            int fila = numRegPagina * (numPagina - 1) + 1;
            int cont = 1;

            ResultSetMetaData md = rs.getMetaData();
            int numeroColumnas = md.getColumnCount();
            ArrayList alRegistro = new ArrayList(numeroColumnas);

            for (int i = 1; i <= numeroColumnas; i++) {
                String nomCol = md.getColumnName(i);
                alRegistro.add(nomCol);
            }
            alResultado.add(alRegistro);
            if (rs.absolute(fila) && numRegPagina > 0) {
                do {
                    alRegistro = new ArrayList();
                    for (int i = 1; i <= numeroColumnas; i++) {
                        alRegistro.add(rs.getString(i));
                    }
                    alResultado.add(alRegistro);
                    cont++;
                } while (rs.next() && (cont <= numRegPagina));
            }
            // Se incluye el primer elemento del ArrayList con un objeto Integer
            // con el Numero de Tuplas TOTAL de la query paginada
            // Se mueve el cursor a ultima tupla
            Integer numTuplasTotal = new Integer(0);
            if (rs.last()) { // Existen tuplas y el cursor esta en la ultima,
                // basta con consultar el numero de esa tupla
                numTuplasTotal = new Integer(rs.getRow());
            }
            alResultado.add(0, numTuplasTotal);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (st != null) {
                try {
                    st.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if (rs != null) {
                try {
                    rs.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if (conBBDD != null) {
                try {
                    conBBDD.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
        return (alResultado);
    }

    public static String borrarPrimeraPalabra(String frase) {
        //si la frase contiene espacios
        if (frase.indexOf('-') != -1) {
            //se obtiene la cadena desde el primer caracter hasta el primer espacio
            frase = frase.substring(frase.indexOf('-'), frase.length());
            do {
                //se toma a partir del caracter 1 para omitirlo
                frase = frase.substring(1);
                //mientras el carcter 0 sea un espacio,
            } while (frase.charAt(0) == '-');
        }
        return frase;
    }

    public static String Ppalabra(String fra) {
        String fr[] = fra.split("-");
        for (int i = 0; i < fr.length; i++) {
            return fr[i];
        }
        return fr[0];
    }
    
     public void cargarListas(JComboBox com, int listnumero) {
        try {
            
            conexion.conectar();
            conexion.setQuery("SELECT val_nombre AS CODIGO FROM Valores WHERE Listas_lis_numero = "+listnumero);
            conexion.Consultar();
            while (conexion.getResultado().next()) {
                com.addItem(conexion.getResultado().getString("CODIGO"));
            }
        } catch (SQLException ex) {
            ex.printStackTrace();
        } finally {
            conexion.cerrarResultado();
            conexion.cerrarStatement();
            conexion.cerrarConexion();
        }
    }
}
